<!DOCTYPE html>
<html>

<head>
  <title></title>
  <script type="text/javascript">
  /**
   * 箭头函数有几个使用注意点。
   * （1）函数体内的this对象，就是定义时所在的对象，而不是使用时所在的对象。
   * （2）不可以当作构造函数，也就是说，不可以使用new命令，否则会抛出一个错误。
   * （3）不可以使用arguments对象，该对象在函数体内不存在。如果要用，可以用 rest 参数代替。
   * （4）不可以使用yield命令，因此箭头函数不能用作 Generator 函数。
   * @param  {[type]} v [description]
   * @return {[type]}   [description]
   */
  var f = v => v;

  //相当于
  var f = function(v) {
    return v;
  }

  //箭头不需要参数
  var f = () => 5;
  //等同于
  var f = function() {
    return 5;
  }

  var sum = (num1, num2) => { return num1 + num2; }


  let getTempItem = id => ({ id: id, name: "Temp" });

  // 箭头函数写法
  [1, 2, 3].map(x => x * x);

  function Timer() {
    this.s1 = 0;
    this.s2 = 0;
    // 箭头函数
    setInterval(() => this.s1++, 1000);
    // 普通函数
    setInterval(function() {
      this.s2++;
    }, 1000);
  }

  var timer = new Timer();

  setTimeout(() => console.log('s1: ', timer.s1), 3100);
  setTimeout(() => console.log('s2: ', timer.s2), 3100);
  // s1: 3
  // s2: 0
  </script>
</head>

<body>
</body>

</html>